import {logger} from './log4js';

// 这个middleware用于将ctx.result中的内容最终回传给客户端
const responseHandler = (ctx: any, next: any) => {
	next().then(()=>{
		if (ctx.result !== undefined) {
			ctx.body = {
				code: 200,
				msg: ctx.msg || '',
				data: ctx.result,
			};
			ctx.set('Content-Type', 'application/json;charset=UTF-8')
		}
	});
};

// 这个middleware处理在其它middleware中出现的异常,我们在next()后面进行异常捕获，出现异常直接进入这个中间件进行处理
const errorHandler = (ctx: any, next: any) => {
	return next().catch((err: any) => {
		if (err.code == null) {
			logger.logError(err.stack);
		}
		ctx.body = {
			code: err.code || -1,
			data: null,
			msg: err.message.trim(),
		};
		// 保证返回状态是 200
		ctx.status = 200;
		return Promise.resolve();
	});
};

export {
	responseHandler,
	errorHandler,
};
